import { ref, reactive } from 'vue'

export interface AIMessage {
  id: string
  type: 'user' | 'ai' | 'system'
  content: string
  timestamp: Date
  status?: 'sending' | 'sent' | 'error'
}

export interface AISuggestion {
  id: string
  title: string
  description: string
  icon: string
  action: string
  category: 'writing' | 'formatting' | 'analysis' | 'translation'
}

export interface AICapability {
  name: string
  description: string
  examples: string[]
}

class AIService {
  private messages = ref<AIMessage[]>([])
  private isProcessing = ref(false)
  private capabilities = ref<AICapability[]>([])

  constructor() {
    this.initializeCapabilities()
    this.addWelcomeMessage()
  }

  // 初始化AI能力
  private initializeCapabilities() {
    this.capabilities.value = [
      {
        name: '文档优化',
        description: '改善文档结构、语言表达和可读性',
        examples: [
          '优化段落结构',
          '改善语言表达',
          '增强可读性',
          '统一写作风格'
        ]
      },
      {
        name: '内容生成',
        description: '根据主题和要求生成高质量内容',
        examples: [
          '生成文档大纲',
          '扩展内容要点',
          '创建示例代码',
          '编写技术文档'
        ]
      },
      {
        name: '语法检查',
        description: '检查并修正语法、拼写和标点错误',
        examples: [
          '修正语法错误',
          '检查拼写问题',
          '优化标点使用',
          '改善句式结构'
        ]
      },
      {
        name: '格式转换',
        description: '在不同文档格式之间进行转换',
        examples: [
          'Markdown 转 HTML',
          '表格格式化',
          '代码块优化',
          '链接格式统一'
        ]
      },
      {
        name: '内容分析',
        description: '分析文档内容并提供改进建议',
        examples: [
          '分析文档结构',
          '评估内容质量',
          '提供改进建议',
          '检查逻辑连贯性'
        ]
      },
      {
        name: '多语言支持',
        description: '翻译和本地化文档内容',
        examples: [
          '中英文翻译',
          '术语统一',
          '文化适配',
          '语言风格调整'
        ]
      }
    ]
  }

  // 添加欢迎消息
  private addWelcomeMessage() {
    const welcomeMessage: AIMessage = {
      id: 'welcome',
      type: 'ai',
      content: `👋 你好！我是你的AI写作助手。

我可以帮助你：
• 📝 优化文档内容和结构
• 🔍 检查语法和拼写错误
• 📋 生成文档大纲和内容
• 🌐 翻译和本地化文档
• 💡 提供写作建议和改进方案
• 🎨 格式化和美化文档

你可以：
1. 选择下方的快捷操作
2. 直接输入你的问题或需求
3. 粘贴需要处理的文本内容

有什么可以帮助你的吗？`,
      timestamp: new Date()
    }
    this.messages.value.push(welcomeMessage)
  }

  // 获取消息列表
  getMessages(): AIMessage[] {
    return this.messages.value
  }

  // 发送消息
  async sendMessage(content: string, context?: string): Promise<void> {
    // 添加用户消息
    const userMessage: AIMessage = {
      id: Date.now().toString(),
      type: 'user',
      content,
      timestamp: new Date(),
      status: 'sent'
    }
    this.messages.value.push(userMessage)

    // 设置处理状态
    this.isProcessing.value = true

    try {
      // 模拟AI处理延迟
      await new Promise(resolve => setTimeout(resolve, 1000 + Math.random() * 2000))

      // 生成AI响应
      const aiResponse = await this.generateResponse(content, context)
      
      const aiMessage: AIMessage = {
        id: (Date.now() + 1).toString(),
        type: 'ai',
        content: aiResponse,
        timestamp: new Date(),
        status: 'sent'
      }
      this.messages.value.push(aiMessage)

    } catch (error) {
      const errorMessage: AIMessage = {
        id: (Date.now() + 1).toString(),
        type: 'system',
        content: `抱歉，处理你的请求时出现了错误：${error instanceof Error ? error.message : '未知错误'}`,
        timestamp: new Date(),
        status: 'error'
      }
      this.messages.value.push(errorMessage)
    } finally {
      this.isProcessing.value = false
    }
  }

  // 生成AI响应（模拟）
  private async generateResponse(userInput: string, context?: string): Promise<string> {
    const input = userInput.toLowerCase()

    // 优化文本
    if (input.includes('优化') || input.includes('改进') || input.includes('润色')) {
      return `我来帮你优化这段内容：

**原文分析：**
- 内容结构清晰度：良好
- 语言表达流畅度：可以改进
- 逻辑连贯性：需要加强

**优化建议：**
1. **结构优化**：建议使用更清晰的段落划分
2. **语言改进**：使用更准确和生动的词汇
3. **逻辑加强**：添加过渡句增强连贯性

**优化后的内容：**
${context ? this.optimizeText(context) : '请提供需要优化的具体内容，我会为你进行详细的改进。'}

你觉得这样的优化如何？还有其他需要调整的地方吗？`
    }

    // 生成大纲
    if (input.includes('大纲') || input.includes('outline') || input.includes('结构')) {
      return `我来为你生成文档大纲：

# 📋 文档大纲建议

## 1. 引言部分
- 背景介绍
- 目标和范围
- 读者对象

## 2. 主要内容
- 核心概念说明
- 详细功能介绍
- 实际应用示例

## 3. 技术细节
- 实现方法
- 配置说明
- 最佳实践

## 4. 进阶内容
- 高级功能
- 自定义扩展
- 性能优化

## 5. 总结部分
- 关键要点回顾
- 后续发展方向
- 相关资源链接

这个大纲结构如何？你可以根据具体内容进行调整。需要我详细展开某个部分吗？`
    }

    // 语法检查
    if (input.includes('语法') || input.includes('检查') || input.includes('错误')) {
      return `我来检查语法和表达：

**语法检查结果：**
✅ 整体语法结构正确
✅ 标点符号使用规范
⚠️ 发现几处可以改进的地方：

**改进建议：**
1. **词汇选择**：建议使用更准确的专业术语
2. **句式变化**：适当调整句子长度，增加表达层次
3. **逻辑连接**：添加适当的连接词，增强文章流畅性

**修正示例：**
${context ? this.checkGrammar(context) : '请提供需要检查的具体文本内容。'}

还有其他需要检查的内容吗？`
    }

    // 翻译功能
    if (input.includes('翻译') || input.includes('translate') || input.includes('英文')) {
      return `我来帮你进行翻译：

**翻译服务：**
- 🇨🇳 中文 ↔ 🇺🇸 英文
- 🇯🇵 日文 ↔ 🇰🇷 韩文
- 🇫🇷 法文 ↔ 🇩🇪 德文

**翻译特色：**
- 保持原文语境和语调
- 适配目标语言的表达习惯
- 专业术语准确翻译
- 文化背景适配

${context ? `**翻译结果：**\n${this.translateText(context)}` : '请提供需要翻译的具体内容。'}

需要其他语言的翻译服务吗？`
    }

    // 代码相关
    if (input.includes('代码') || input.includes('code') || input.includes('编程')) {
      return `我来帮你处理代码相关内容：

**代码服务：**
- 📝 代码注释生成
- 🔍 代码审查和优化
- 📚 技术文档编写
- 🐛 错误分析和修复建议

**支持语言：**
- JavaScript/TypeScript
- Python
- Java
- C/C++
- Go
- Rust
- 以及更多...

**示例服务：**
\`\`\`typescript
// 我可以帮你：
// 1. 添加详细注释
// 2. 优化代码结构
// 3. 解释复杂逻辑
// 4. 提供最佳实践建议
\`\`\`

请提供你的代码，我会为你提供专业的分析和建议！`
    }

    // 格式化
    if (input.includes('格式') || input.includes('format') || input.includes('排版')) {
      return `我来帮你格式化文档：

**格式化服务：**
- 📝 Markdown 格式优化
- 📊 表格格式化
- 🔗 链接格式统一
- 📋 列表结构优化
- 🎨 代码块美化

**格式化特色：**
- 统一缩进和间距
- 优化标题层级
- 规范化标点符号
- 美化代码展示

${context ? `**格式化结果：**\n${this.formatText(context)}` : '请提供需要格式化的具体内容。'}

还需要其他格式化服务吗？`
    }

    // 默认响应
    return `我理解你的需求："${userInput}"

我可以为你提供以下帮助：

**📝 写作辅助**
- 内容优化和润色
- 语法检查和修正
- 文档结构建议

**🔧 格式处理**
- Markdown 格式化
- 表格和列表优化
- 代码块美化

**🌐 翻译服务**
- 多语言翻译
- 术语统一
- 文化适配

**💡 创意支持**
- 内容生成
- 大纲制作
- 示例创建

请告诉我你具体需要什么帮助，或者提供需要处理的内容，我会为你提供专业的建议！`
  }

  // 文本优化
  private optimizeText(text: string): string {
    // 简单的文本优化逻辑
    return text
      .replace(/\s+/g, ' ')
      .replace(/([。！？])\s*([a-zA-Z])/g, '$1 $2')
      .replace(/([a-zA-Z])\s*([。！？])/g, '$1$2')
      .trim()
  }

  // 语法检查
  private checkGrammar(text: string): string {
    // 简单的语法检查逻辑
    const corrections = [
      { from: /的的/g, to: '的' },
      { from: /，，/g, to: '，' },
      { from: /。。/g, to: '。' },
      { from: /\s+([，。！？；：])/g, to: '$1' }
    ]

    let corrected = text
    corrections.forEach(({ from, to }) => {
      corrected = corrected.replace(from, to)
    })

    return corrected
  }

  // 翻译文本
  private translateText(text: string): string {
    // 简单的翻译逻辑（实际应用中需要调用翻译API）
    const translations: Record<string, string> = {
      '你好': 'Hello',
      '谢谢': 'Thank you',
      '再见': 'Goodbye',
      '文档': 'Document',
      '编辑器': 'Editor',
      '功能': 'Feature'
    }

    let translated = text
    Object.entries(translations).forEach(([chinese, english]) => {
      translated = translated.replace(new RegExp(chinese, 'g'), english)
    })

    return translated
  }

  // 格式化文本
  private formatText(text: string): string {
    return text
      .replace(/^#\s+(.+)$/gm, '# $1')
      .replace(/^##\s+(.+)$/gm, '## $1')
      .replace(/^###\s+(.+)$/gm, '### $1')
      .replace(/^\*\s+(.+)$/gm, '- $1')
      .replace(/^\d+\.\s+(.+)$/gm, (match, content, offset, string) => {
        const lineNumber = string.substring(0, offset).split('\n').length
        return `${lineNumber}. ${content}`
      })
  }

  // 获取建议列表
  getSuggestions(): AISuggestion[] {
    return [
      {
        id: 'optimize',
        title: '优化文字',
        description: '改善语言表达和文档结构',
        icon: 'Lightbulb',
        action: 'optimize',
        category: 'writing'
      },
      {
        id: 'outline',
        title: '生成大纲',
        description: '为文档创建结构化大纲',
        icon: 'FileText',
        action: 'outline',
        category: 'writing'
      },
      {
        id: 'grammar',
        title: '语法检查',
        description: '检查并修正语法错误',
        icon: 'Wand2',
        action: 'grammar',
        category: 'writing'
      },
      {
        id: 'polish',
        title: '润色内容',
        description: '提升文档的专业性和可读性',
        icon: 'Sparkles',
        action: 'polish',
        category: 'writing'
      },
      {
        id: 'translate',
        title: '翻译文档',
        description: '多语言翻译和本地化',
        icon: 'Globe',
        action: 'translate',
        category: 'translation'
      },
      {
        id: 'format',
        title: '格式化',
        description: '优化文档格式和排版',
        icon: 'AlignLeft',
        action: 'format',
        category: 'formatting'
      },
      {
        id: 'analyze',
        title: '内容分析',
        description: '分析文档质量和结构',
        icon: 'BarChart3',
        action: 'analyze',
        category: 'analysis'
      },
      {
        id: 'expand',
        title: '扩展内容',
        description: '根据要点生成详细内容',
        icon: 'Plus',
        action: 'expand',
        category: 'writing'
      }
    ]
  }

  // 处理快捷建议
  async handleSuggestion(action: string, context?: string): Promise<void> {
    const suggestions: Record<string, string> = {
      optimize: '帮我优化这段文字，让它更加清晰和专业',
      outline: '请为这个内容生成一个结构化的大纲',
      grammar: '请检查这段文字的语法和拼写错误',
      polish: '请润色这段内容，提升它的表达质量',
      translate: '请将这段内容翻译成英文',
      format: '请帮我格式化这段Markdown内容',
      analyze: '请分析这段内容的质量和结构',
      expand: '请根据这些要点扩展成详细内容'
    }

    const message = suggestions[action] || action
    await this.sendMessage(message, context)
  }

  // 获取处理状态
  isProcessingMessage(): boolean {
    return this.isProcessing.value
  }

  // 清空消息历史
  clearMessages(): void {
    this.messages.value = []
    this.addWelcomeMessage()
  }

  // 获取AI能力
  getCapabilities(): AICapability[] {
    return this.capabilities.value
  }

  // 导出对话历史
  exportConversation(): string {
    const conversation = this.messages.value
      .map(msg => `**${msg.type === 'user' ? '用户' : 'AI助手'}** (${msg.timestamp.toLocaleString()}):\n${msg.content}\n`)
      .join('\n---\n\n')

    return `# AI助手对话记录\n\n${conversation}`
  }

  // 搜索消息
  searchMessages(query: string): AIMessage[] {
    return this.messages.value.filter(msg => 
      msg.content.toLowerCase().includes(query.toLowerCase())
    )
  }

  // 获取消息统计
  getMessageStats() {
    const total = this.messages.value.length
    const userMessages = this.messages.value.filter(msg => msg.type === 'user').length
    const aiMessages = this.messages.value.filter(msg => msg.type === 'ai').length
    const systemMessages = this.messages.value.filter(msg => msg.type === 'system').length

    return {
      total,
      user: userMessages,
      ai: aiMessages,
      system: systemMessages,
      averageLength: this.messages.value.reduce((sum, msg) => sum + msg.content.length, 0) / total || 0
    }
  }
}

export const aiService = new AIService()